home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / asyncasm / asm6.co next >
Encoding:
Text File  |  1986-02-06  |  52.8 KB  |  971 lines

  1. Handling Interrupts using the Macro Assembler!
  2.  
  3. This is the script from the Jerry Stuckle ASM Conference on Interrupts which was
  4. held during the regular 8PM Conference on Sunday, 3 February 1985 and refers to
  5. the ASM program ASYNCH.ASM in DL4.  The script has been slightly edited to
  6. conform to the 80 character line.  Thanks to Jerry and all who participated to
  7. make this a very well organized and informative Conference on Assembly Language.
  8. Jerry is constantly on the lookout for suggestions for new topics to cover in
  9. future Conferences.  Leave Jerry a message or send him Email to his PIN,
  10. 72205,234!
  11.  
  12. (30,Jerry S) I think this one is going to run a while!  ga
  13. (30,Jerry S) 
  14. Mike --> I'm ready any time, but let's let a few get here first.  I do have...
  15. introductory text written for each section we will be covering.  ga
  16. (30,Frank O'D.) 
  17. Hi!  Jerry > Do you intend to cover all of Async, or certain sections?  ga
  18. (30,Jerry S) 
  19. Mike -->OK, this is popular, from the number of DOWnloads on the files! ga
  20. (30,Jerry S) 
  21. Frank ->Hi! We'll be going through all of it (if it doesn't get too long). If it
  22. (30,STEVE HULL) ??
  23. (30,Jerry S) 
  24. John --> As long as it's quick, I think we're about ready.  ga
  25. (30,John Stidd) 
  26. Is there a good book that explains the file formats of OBJ and LBR?
  27. (30,Avi S.) about how long is the CO?
  28. Recognize your question Steve. Guess We'll get started. Everyone use ?? for ...
  29. Questions O.K.??  ga 
  30. (30,Jerry S) 
  31. John --> Nope.  That's Microsoft's secret.  ga 
  32. (30,Craig Derouen  ) ??
  33. (30,STEVE HULL) HOW CAN I GET THE ENTIRE LINE TO DISPLAY ?
  34. Avi <== CO is usually one to one and a half hours.  ga
  35. (30,Jerry S) Steve --. If you are using an emulator (i.e. VT100),turn it off. ga
  36. (30,Julian Thomas  ) ?? I have a simple tip for beginning ASM users - ga
  37. Question Craig  ga
  38.  
  39. (30,Jerry S) 
  40. Julian -> This CO is for advanced users. Beginning was last week on 129.  ga
  41. Mike --. We all ready to go?  ga
  42. Let's hit it, Jerry.  How about an Intro?  ga
  43.  
  44. (30,Jerry S) 
  45. OK, all.  Just a couple of notes.  I will have prepared text before each
  46. section of code.  At the end of the text, I will ask for questions.  Please
  47. hold your questions to then, and use the '??' to indicate you have one.  If
  48. you have a comment which is relative th *THE TOPIC AT HAND*, use '!!' to
  49. indicate the comment.  Please, let's not get too far off the subject tonight,
  50. we have a lot to cover, and not much time to do int in!  We will not be looking
  51. at specific instructions, rather we will be looking at the code.  So, here
  52. comes the first introductory prepared text.
  53. Good evening all, and welcome to the next in a series of MASM conferences!
  54. It has been a long time since we've had one, but I hope we can get them
  55. going on a more regular basis.
  56. The documentation for tonight is the file ASYNC.ASM on the DL4 database.
  57. I hope everyone has DOWnloaded it, we will not have enough time to go over
  58. the instructions.  Rather, tonight I would like to discuss the use of some
  59. simple macros, how to handle hardware and software interrupts, and writing
  60. structured code in ASM.
  61. Before we get started, there is a bug in the V1.0 assembler which has reared
  62. its ugly head (again).  This bug is fixed in the V2.0 MASM, so you won't
  63. have the problem if you use the V2.0 assembler.
  64. The bug is in the LEA instruction, when referencing a FAR procedure.  The
  65. V1.0 assembler tries to set up a OFFSET:SEGMENT address in the instruction,
  66. which is, of course, invalid.  To correct the problem you can simply change
  67. INT14   PROC    FAR
  68. to
  69. INT14   PROC    NEAR
  70. Since the entry and exit points to this procedure are via interrupts, it
  71. won't make any difference if it is a NEAR or a FAR call.  If you DOWnloaded
  72. the file after Jan 28, you have a corrected copy of the routine.
  73. I will have some prepared text (like this one) on each of several topics
  74. in the program.  At the end of the text, I will ask for questions.  Please
  75. limit you questions to the code at hand; we have a lot to cover tonight,
  76. and can't stray too far, or we won't get everything in.  So, before we get
  77. started, are there any questions?  ga
  78. P.S. please ignore any typos in the text.  I don't type so well!  ga
  79. Fine.  Let's get started then.
  80. Before we get into the code itself, lets take a look at the program in general.
  81. There are some coding conventions I follow which make it easier for me to read
  82. Mike, ga and pick up John.  ga
  83. (30,John Stidd) Would like more info on ASM release 2.0
  84. (30,Jerry S) 
  85. John, that is available from IBM.  You get an updated copy for $75 plus the
  86. cover from your old MASM V1.0 manual.  Contact your nearest IBM dealer for more
  87. info.  OK?  ga
  88. (30,E.J. Tejera    ) !!
  89. GA E.J. ga
  90. (30,E.J. Tejera    ) 
  91. It is not so easy, I tried to exchange V1 and IBM Center here had NO ..
  92. knowledge....ga
  93. (30,Jerry S) 
  94. EJ, they should by now.  They need to contact their suppliers for more info, if
  95. they don't know.  ga
  96. (30,E.J. Tejera    ) I'll keep triyng...ga
  97. (30,Julian Thomas  ) !!
  98. (30,Jerry S) 
  99. EJ, you do have to send in form. The exchange is not available at the store. ga
  100. GA Julian. ga
  101. (30,E.J. Tejera    ) OK ga
  102. (30,Julian Thomas  ) 
  103. Jerry S just said it. Most dealers "should" have the upgrade form... ga
  104. (30,Jerry S) OK, any other questions?  ga
  105. Fine.  Let's get started then.
  106. Before we get into the code itself, lets take a look at the program in general.
  107. There are some coding conventions I follow which make it easier for me to read
  108. the output.  By no means are they required, and other people have different
  109. ideas, but this is the way I do things, anyway, for better or worse.
  110. Macros should be placed (or Included) at the start of the file.  Normally I
  111. will use the IF1/ENDIF around the macros, so they don't print in the final
  112. copy.  I did not use them here so that you can see the output of the macros.
  113. The use of IF1/ENDIF around the macro definitions will not affect the code
  114. generation, but will prevent them from being printed.
  115. Labels, commands and variables I capitalize.  I used to use all upper case
  116. letters, but that gets a bit glaring.  Also, it helps set off the variable
  117. names in an instruction, and I find it easier to read.  All lower case seems
  118. to get lost in the shuffle.  Note that the only times case are important are
  119. in the Ifidn and Ifdif psuedo ops.  That is, Ifidn <A>,<a> will not compare.
  120. Otherwise, case does not matter.
  121. Registers I code in upper case.  Since all the registers have 2 character Id's,
  122. it doesn't glare, and you can spot them easily in the code.
  123. A base identifier (i.e. 'H' for Hexadecimal) is in lower case.  This way the
  124. base doesn't get mixed up with the number.  This is especially true when a 'D'
  125. can look like a '0' at a quick glance.
  126. You will also note I don't place labels on statements.  I use the 'Label'
  127. psuedo op instead.  I find this helpful when writing code.  How many times
  128. have you had to add a statement after a label, but before the statement the
  129. label is on?  This way, just insert the line of code.
  130. And, it goes without saying that good use of Subttl and Page psuedo ops will
  131. make the listing a lot easier to read, and later debugging much faster.  It
  132. also looks better when showing it to others.
  133. I find these general guidelines make the final output look more professional.
  134. Again, these are just my ideas, what you want to do may be different.  So,
  135. are there any questions?  ga.
  136. Ok, lets take a look at the macros we will be using here.  Note that these
  137. macros are all general in nature, and came from a macro library I have built
  138. up over the years.  I have found if you have to execute similiar code more
  139. than one place in the program, a macro can be helpful.
  140. The first macro is actually a pair - Save and Restore.  Save will PUSH the
  141. requested regs (up to 10) into the stack.  Restore is used without registers,
  142. and will pop the regs from the stack.  This works because of a not-well
  143. documented fact in MASM - if macros are nested, the inner macro can access the
  144. paramaters and local variables of the outer macro.  The inner macro will not
  145. expand when the outer macro is called.
  146. The Setint macro is used to set up interrupt vectors.  This macro is handy
  147. because you don't have to remember the DOS function to use, what registers
  148. need to be set, etc.  The only restriction here is DS must point to the
  149. segment of the vector (preset by DOS for .COM programs.)
  150. The Incbuf is used to increment a circular buffer pointer.  It is also called
  151. from the Putbuf (place a character in the buffer) and Getbuf (get a character
  152. from the buffer) routines
  153. Bufinit and Flush are used to initialize the buffer and clear the buffer,
  154. respectively.  All the buffer macros are dependant on the buffer being defined
  155. with the BUFFER structure, shown next.  This structure defines the size of
  156. the circular buffer, and makes room for the data start and end pointers in the
  157. buffer.
  158. This is a quick overview of the macros.  Are there any questions about these
  159. macros before we go on?
  160. (30,John Stidd) ??
  161. GA John. ga
  162. (30,Roy T.) ca << 24
  163. (30,John Stidd) 
  164. Are the parameters in a Record available even if the Record is never invoked...
  165. Initial is nev+sed in the OpCode field in this program. ga
  166. correction "never used"(in Op...)ga
  167. (30,Jerry S) 
  168. John, yes they are.  This will define the fields.  In this case, I am using the
  169. Initial record to define some fields.  Equates could also be used, but I wnated
  170. to show a record.  The advantage to using the Record name in an opcode is you
  171. can define the record to be any number of bits long; the final length of the
  172. variable will be the minimum number of bytes required to hold those bits.  ga
  173. Any other questions?  ga
  174.  
  175. (30,Jerry S) 
  176. We're moving right along!  The next few statements are EQUates for some of
  177. the bits we will be using later.  An advantage of using EQUates is, if we
  178. need to change something later, we only need to change it one place (in the
  179. EQU), and reassemble the program.
  180. Next we come to the segment header, and initialize our segment to start at
  181. 100h.  You will notice the first statement is a JMP to Start.  This is handy
  182. in a .COM program, as you can define the data right at the beginning, where
  183. the attributes are known the first pass of the assembler.  This can save a
  184. lot of problems later with the feared 'Phase error between passes' message.
  185. The routine we are JMPing to is at the end.  Let's go to label Start.
  186. Down here, we initialize the buffer pointers (Bufinit macro), set up the
  187. interrupt handlers for INT 0C and INT 14, and execute DOS interrupt 27h.  This
  188. is the old DOS 1.x terminate but stay resident interrupt.  I used INT 27
  189. instead of the newer version in DOS 2.x for compatability reasons - some of the
  190. people here may not be using DOS 2.x yet.
  191. Note that before we terminate the program, we load the address of RESEND into
  192. DX.  This is before the routine we are currently executing.  This is possible
  193. in this case, because this code is executed once (this time), and never again.
  194. This is also why we place this code at the end of the routine.  While we only
  195. save a few bytes here, in programs with larger initialization routines, the
  196. savings may be considerable.
  197. Now, are there any questions?  ga
  198. We're doing great, here!  Lets move on then.  We will skip over the data areas
  199. right now, and mention them as we go along.  Let's go to the INT 14 procedure.
  200. From now on, the updates will be shorter, and we will take the code one
  201. procedure at a time.
  202. The first proc is INT 14.  Note that this is a large procedure, containing
  203. several other procedures.  The first thing we do coming in is enable interrupts
  204. again, save the regs and verify paramaters.  If any parm is bad, we return with
  205. 0FFh in AL.
  206. If the parms are ok, we move the function code to BX, multiply by 2, and call
  207. the correct routine to handle the request, via a table (Functbl).  The
  208. advantage of using a table here is, you don't have to check for each possible
  209. function type, and (as in this case), we defined FUNCNT (function count) to be
  210. the size of the table/2 (2 bytes per entry).  To add a function, copy in your
  211. new procedure, and add a pointer to Functbl and you're ready to go.  Also, to
  212. change the pointer to a routine, just change the Functbl pointer.
  213. When we return, we just restore the regs and execute an IRET.  The interrupt
  214. return is required as we entered the routine via an interrupt.
  215. Any questions about this routine?  ga
  216. (30,Zhahai) ??
  217. GA Zhahai. ga
  218. (30,Zhahai) When is the value of an EQU evaluated?  ga
  219. (30,Jerry S) 
  220. Hi, Zhahai!  The EQU is evaluated whenever the assembler can set it up -
  221. that is, if everything is known at pass 1 (like here), it will be set up
  222. on pass 1.  If something is not known, it may be set up on pass 2.  The real
  223. value of an equate is to be able to use a meaningful name in an instruction,
  224. instead of the value.  That is, the statement:
  225.         Or    AH,Timeout
  226. is a lot more meaningful then the instruction:
  227.         Or    AH,80h
  228. If Timeout is Equated to 80h, the two statements are identical.  Just the first
  229. one means something, the second may not.  OK?  ga
  230. (30,Julian Thomas  ) !! It sin't particularly useful dynamically used! ga
  231. (30,Zhahai) A recent thread gave an example wherein an EQU with $...
  232. did not evaulate the $ where it was defined (as here), but when...
  233. later used.  Worried me.  I have only used constant EQUs.  ga
  234. (30,Jerry S) 
  235. Zhahai, If you look at the output of an EQU, it will have a value associated
  236. with it, although it takes up no memory.  In your case, the statement:
  237. Current_Location Equ   $
  238. should set the constant Current_Location to the value in the location counter
  239. at this point.  If used later, it will point back to where Current_Location
  240. was set up.  Resend is a good example of that.  ga
  241. (30,John Stidd) !! Symbol Equ $ doesn't work.  Needs Offset $. ga
  242. (30,Zhahai) OK, I will ask some more offline.  ga
  243. (30,Jerry S) No problem...
  244. All --. When using the '!!', please wait to be recognized.
  245. GA John. ga
  246. John, it sure seems to work every place I use it.  Note that the location
  247. counter is NOT a constant, where 'Offset $' is - that is, there is a difference,
  248. (30,John Stidd) ??
  249. and some of the things you do with one cannot be done with another.  I would
  250. prefer not to get too deep into the difference, but when working with offsets,
  251. you should be able to use the 'Equ $'.  ga
  252. (30,GREG NOLL ) NANOO<NANOO<
  253. Is that a question, Greg? ga
  254. (30,Jerry S) Mike --. John had a question.  ga
  255. (30,John Stidd) ??
  256. (30,GREG NOLL ) NO JUST A GREETING
  257. I thought you answered John's.  If not, GA John. ga
  258. (30,John Stidd) 
  259. I can't remember specifics, but once tore my hair out with a problem...
  260. that I finally fixed with Offset  $.  Is this another 1.00 vs. 2.00 dif? ga
  261. (30,Jerry S) 
  262. John, not really.  However, as I said, there are differences.  I.E. if you want
  263. to find the length of a routine, you may need to use
  264. Routine_Length Equ Offset $ - Offset Routine_Start
  265. Using:
  266. Routine_Length Equ $ - Offset Routine_Start
  267. is different, and may cause problems.  ga
  268. (30,John Stidd) ??
  269. GA John. ga
  270. (30,John Stidd) 
  271. Is there anything published that explains this nitty stuff really well? ga
  272. (30,Jerry S) 
  273. John, the best I can recommend is to hit your nearest large book store.  This
  274. area is not well documented any place I have found, and most of what I have
  275. learned was by trial and error.  If you get strange results, look at what the
  276. EQU inserted for a value (on the left of the listing).  This is the value which
  277. will be inserted when the constant is later used.  Also, you should be able to
  278. see the value in the statement which uses the constant.  ga
  279. (30,Jerry S) Any other questions?  ga
  280. Great!  Let's continue then.
  281. The next procedure, Copen, is used to initialize the port.  It sets the speed,
  282. parity, number of stop bits, and number of data bits.  The only thing here
  283. which is a little unusual is the DIVISOR table.  We get the speed from the
  284. passed request, and convert (via MASK and SHR) to an offset into the DIVISOR
  285. table.  The value pointed to is picked up and placed into the divisor latch on
  286. the Async board, therefore setting thebaud rate.
  287. Next we set the Line control register (by the way, we are taking a shortcut and
  288. also turning off the DLAB bit, so that we are not using the divisor latch
  289. registers any more.
  290. Noext we have to save things for a minute and enable the system for interrupts
  291. from the async board.  This MUST be done before enabling the interrupts at the
  292. async board.  Otherwise, a pending interrupt from the async board may 'hang'
  293. all future interrupts.  Note that the STI instruction does not disable the
  294. hardware interrupt, just the software processing of the interrupt.
  295. After we enable the system for interrupts, we enable the async card.  Any time
  296. after this, our interrupt routine may get control.  We disable interrupts while
  297. working with the buffers, and flush both transmit and receive buffers.  We get
  298. the current status, set the line and modem status bytes, call the status
  299. routine (Cstat), and return to caller.
  300. This is about the most complex routine in the INT 14 procedure, and I'm sure
  301. we have some questions.  Ga.
  302. (30,DaveA) !!
  303. GA DaveA. ga
  304. (30,DaveA) Jerry, A typo above.  CLI disables interrupts, not STI.  ga
  305. (30,Jerry S) 
  306. You're correct, Dave!  I saw that this time, but not the other times I
  307. proofed it!  The code is correct, we have a CLI before and a STI after.  ga
  308. (30,DaveA) 
  309. Jerry, just keeping you on your toes (grin).  BTW, Wes said to say hi.  ga
  310. (30,Jerry S) Thanks, Dave.  Any other comments/questions?  ga
  311.  
  312. (30,Zhahai) ??
  313. GA Zhahai. ga
  314. (30,Zhahai) Why the "nop ;allow dummy machine cycle" ?
  315. (30,Jerry S) 
  316. Zhahai, That is to allow any interrupts pending from the async port to be
  317. processed.  We have to take a machine cycle for the hardware to detect/set up
  318. the interrupts.  If we have the CLI immediately after inabling interrupts,
  319. (30,STEVE HULL) ??
  320. (30,Jerry S) 
  321. anything pending may or may not be handled right now.  This way, anything
  322. (30,DaveA) !!
  323. (30,Jerry S) 
  324. pending will be handled immediately by the INT0C routine.  ga
  325. GA Steve. ga
  326. (30,STEVE HULL) Why do you raise RTS during initialization?
  327. (30,Jerry S) 
  328. Steve, in order to send data to the port, we want RTS to come up.  The
  329. modem should respond with CTS, when it can accept data.  Some modems do not
  330. care, others may require RTS to be up before data can be sent.  Note that
  331. this routine assumes full duplex; if you were to write a routine for a
  332. half-duplex system, you would not want to bring up RTS immediately.  OK?  ga
  333. (STEVE HULL) thanks
  334. GA DaveA. ga
  335. (30,DaveA) 
  336. Jerry, On a Z80, the EI execution is actually delayed for one instruction ...
  337. ... time in order to allow a RET to occur, and avoid indefinite nesting. ...
  338. ... Is this also true for STI on the 8086?  I always use two NOP's just ...
  339. ....to be sure.   ga
  340. (30,Jerry S) 
  341. Dave, as far as I can tell, the 8088 also can delay the interrupt.  One Nop
  342. should be sufficient, as the interrupt should occur no later than the end of
  343. the next instruction.  I this case, it should be handled no later than between
  344. the NOP and the CLI.  Although 2 NOP's are nice, especially since they are
  345. only 1-byte instructions, I have not run into problems using only 1.  ga
  346. (30,KevinR) !!
  347. GA KevinR. ga
  348. (30,KevinR) 
  349. One should note the havoc back to back I/O play on an 80286 chip ...
  350. such as  in ;Get the status : Again to clear    ga.
  351. (30,Jerry S) 
  352. Kevin, that should not cause a problem here.  The first status request will
  353. pick up any change (delta lines) from the port.  The delta lines will be
  354. reset by the first request, and the second will only get the lines which
  355. were changed after the first request.  Otherwise, we might get old status
  356. (30,DaveA) !!
  357. from a line which changed before the open request was started. 
  358. This is not really an I/O request, just a read from a port.  ga
  359. (30,KevinR) !!
  360. GA DaveA. ga
  361. (30,DaveA) 
  362. Likewise, don't issue an STI on a 286 for several instruction times after ...
  363. ... inhibiting a channel on an 8259.  The pipelining on a 286 causes many ...
  364. ... new problems.  ga
  365. GA KevinR. ga
  366. (30,Jerry S) 
  367. Dave, that could be true.  I (unfortunately) don't have an 80286.  ga
  368. (30,KevinR) Jerry, Have you tried running ASYNC.ASM on an IBM AT ?? .....
  369. (30,Jerry S) 
  370. Kevin, no I haven't, but then I didn't write it for an AT.  As I said before,
  371. (30,KevinR) The second In opcode is never even seen by the async board ga.
  372. (30,Jerry S) 
  373. this is an example, and not really a ready-to-run routine.  It may require
  374. modification for your particular system.  ga
  375. Any other questions?  ga
  376. (30,John Stidd) |??
  377. GA John. ga
  378. (30,John Stidd) 
  379. In my listing there is a Cli at the beginning, another Cli at end of page...
  380. (30,DaveA) !!
  381. (30,John Stidd) and no intervening Sti.  Is this right?  ga
  382. (30,Jerry S) 
  383. True, John.  The first CLI should have been removed, it was from an early
  384. version.  Chalk another one up for Murphy!  ga
  385. DaveA. ga
  386. (30,DaveA) 
  387. General advice for anyone coding I/O on a 286:  Include a jump after every ...
  388. ...  IN or OUT instruction.  this flushes the queue, and provides enough ...
  389. ...  delay for both the 286 pipelining difficulties, and most external ...
  390. ...  hardware glitches (like on the AT).  ga
  391. (30,Jerry S) 
  392. Dave, good advice, but can we stay with the current routine (on the 8088)?  ga
  393. (30,DaveA) Yup, sorry.  No more on 286, I promise. ga
  394. (30,Jerry S) Thanks.  Any other questions?  ga
  395. Well, if you're still with us, we're past the hardest part in the INT14
  396. procedure!
  397. The next procedure is the Csend routine.  This is fairly simple.  First
  398. we place a byte from AL into the buffer.  Note that, if the buffer is full,
  399. the Putbuf macro sets the carry bit on return.  If not, the carry bit is
  400. cleared.  If the buffer is full, we get the status (from Cstat again), make
  401. sure the timeout bit is set (indicating buffer full) and return to the caller.
  402. If the buffer is not full, we check to see if transmit holding register
  403. interrupt is already enabled.  If so, we return.  If not, the interrupt is
  404. enabled, allowing the INT0C routine to pick up the new data and transmit it.
  405. As you will see later, the transmit holding register empty interrupt is
  406. disabled when there is no more data in the buffer to transmit.  Restoring
  407. the system interrupt pending is not necessary at this point, and has been
  408. deleted from a later version of the program. It actually should have no effect
  409. on the program operation, although it is possible that a *very* critical
  410. timing condition exists with this code installed.
  411. Any questions?
  412. Well, let's continue then.
  413. The next routine is even easier.  The Crcve procedure takes a byte from the
  414. receive buffer and returns it in AL.  If the buffer is empty, an 0FFh is
  415. returned instead.  Again, we are using the carry flag to inticate buffer empty.
  416. If the buffer is not empty, we return the status (AHSTAT), with the non-error
  417. bits turned off.  This is for compatability with the existing INT 14 routine
  418. in BIOS.
  419. Any questions on the Crcve procedure?  ga
  420. Well, we're getting down to the end of the INT 14 procedure!
  421. The next two procedures are going to be talked about together.  They are the
  422. CSTAT and AHSTAT procedures.
  423. Cstat first calls AHstat to set AH with the current status, and then moves
  424. the modem status into AL.  Ths modem status byte will be set in the INT 0C
  425. routine.
  426. AHstat is also called by several internal routines.  It first gets the line
  427. status into AH.  It then turns off some bits which relate to the buffer, and
  428. gets the buffer status.
  429. The Transmit buffer is first.  We check two things: Is the transmit buffer
  430. not full, and is the buffer not empty; setting the respective bits as
  431. necessary.  We then check if the receive buffer is empty, and set the receive
  432. data ready bit if not.  In either case, we return to the caller.
  433. The logic depends on the circular buffers: If start of data = end of data, then
  434. the buffer is empty.  If start of data = end of data + 1, the buffer is full,
  435. and nothing more can be inserted into it.
  436. Any questions on setting the status bits?
  437. Well, I hope everybody's not lost!  Let's continue then...
  438. OK, the last routine in the INT 14 procedure is Cclos.  This routine will
  439. disable interrupts from the COM port, then from the system (this must be
  440. done after the COM port for the same reasons as above - if the system interrupt
  441. is disabled, and the COM port interrupt enabled, interrupts may not get
  442. processed later.  We also turn off all the modem bits (i.e. Data Terminal
  443. Ready, Request to Send, etc.) and flush the transmit and receive buffers.
  444. While the last part is not necessary, it cleans up after itself.  Any get data
  445. request processed after the close will be returned with no data set.  Note
  446. that a put data will still be processed (if the buffer does not fill up), but
  447. the data will never be sent.
  448. Any questions about the Clos procedure?
  449. Guess not....
  450. OK, we are through with the INT14 procedure.  Before we get into the INT0C
  451. procedure, are there any questions about what we have covered so far?  ga
  452. (30,Zhahai) ??
  453. You just make it all look so simple, Jerry.  GA Zhahai. ga
  454. (30,Zhahai) I'm not clear about the (original) purpose for resetting the...
  455. system interrupt in Csend?  ga
  456. (30,Jerry S) 
  457. Well, Zhahai, that was to make sure any pending interrupts were handled during
  458. developement of the program.  I did not have all the routines set up at that
  459. time, so I had to make sure any pending interrupts were disabled.  That code
  460. has been removed (just last week, in another revision).  Basically, it was
  461. one bit of code which I had in there that didn't get removed when it should
  462. have!  So much for test code!  ga
  463. (30,John Stidd) ??
  464. (30,Zhahai) OK  ga
  465. John. ga
  466. (30,John Stidd) Is the most up to date version of ASYNC.ASM now on DL4? ga
  467. (30,Jerry S) 
  468. John, no it isn't.  I will be UPLoading a slightly later version this week.
  469. I waited as that change was minor, and I didn't want to get too many versions
  470. Jerry <== I'll make a note in a bulletin when it is up.  O.K. ?  ga
  471. out there before the CO.  Also, I just knew you people would catch something
  472. else (like the CLI)!  ga
  473. And thanks, Mike, I will let you know when it is ready.  ga
  474. Anything more before Jerry goes on to the next section? ga
  475. (30,Jerry S) 
  476. Now that we're through with the software interface to the routines, let's take
  477. a look at the hardware interface.
  478. The INT0C procedure should not be called directly by software.  It is the
  479. hardware's interface to the async board.  When the async port requests an
  480. interrupt, it is processed by the system.  Depending on the state of the
  481. interrupt mask bit, an interrupt may be taken now, or held for later
  482. processing.  It is important that the interrupts be disabled for as short a
  483. time as possible (especially at high speeds), or the data coming in may not be
  484. handled as quickly as it gets here.  Since the transmit is under our control,
  485. we can wait (forever, if necessary) for outgoing data, but incoming data must
  486. be processed as quickly as possible.
  487. When the interrupts are enabled, an interrupt request from the async card will
  488. generate an interrupt 0Ch.  Our Start routine set up the interrupt to point to
  489. this code, where it will be handled.
  490. Before we go into the actual code in the INT 0C routine, are there any
  491. questions on how the hardware handles the interrupt?  ga
  492. Let's continue with the software involved, then.
  493. The main part of the code re-enables interrupts (disabled when the interrupt
  494. was processed by the hardware), saves the registers and tells the system we
  495. are available for another interrupt from the COM port.  This is done before the
  496. current interrupt is handled as the code can handle another interrupt while
  497. processing the current one in most cases.  We will disable interrupts in the
  498. areas which cannot be interrupted.
  499. We then look at the Interrupt ID Register to determine what kind of interrupt
  500. is to be handled.  If the register has the low order bit on (01h), there
  501. are no more interrupts to be processed.  While this will not occur on the
  502. first call (after all, how did we get here?), this is the exit code from a
  503. a loop.  Also, if a mistake was made and the software calls this routine (by
  504. executing an INT 0Ch), it will return with no action performed.
  505. If the Interrupt ID register contains other than 01h, an interrupt is pending.
  506. These interrupt ID's have the values of 00h, 02h, 04h, and 06h, which works out
  507. real nicely for another table.  We move the value into BL, clear BH and index
  508. into a table from BX to call the appropriate routine to handle the type of
  509. interrupt.
  510. When thay type of interrupt is handled, we return to here and JMP back to
  511. check the Interrupt ID reg again.  This is because one interrupt may have
  512. multiple functions stacked (i.e. bad parity will set receiver line status and
  513. received data available).  It is important to handle all interrupt ID's before
  514. exiting the routine, or lower priority interrupts will hang.
  515. Also notice this is the only backward JMP in the code.  These should be avoided
  516. if at all possible, as they can cause hard-to-find loops.  We could have gotten
  517. around it, but I didn't for clarity sake.
  518. Now, any questions on the INT0C routine?  ga
  519. (30,Zhahai) ??
  520. GA Zhahai. ga
  521. (30,Zhahai) 
  522. How well defined is the prioritizing of the Int ID register...
  523. Like, what if a recieve comes in while in the loop.  ga
  524. (30,Jerry S) 
  525. Zhahai, the hardware is VERY well defined.  If an interrupt comes in while
  526. processing a higher-priority interrupt, it will be held.  If it comes in
  527. while processing a lower-priority interrupt, it will be handled immediately.
  528. The priority is :
  529. Receiver line status (highest)
  530. Receive data available
  531. Transmit holding reg empty
  532. Modem status (lowest).
  533. Most of the time, this would come into play as receive data available while
  534. setting up to transmit a character.  In this case, we have already reset the
  535. transmit interrupt (we read the Interrupt ID reg), and the character is being
  536. set up to be sent.  The receive data can come in at this time.  Note also that
  537. at speeds below about 48k baud, we should be in and out of our receive routine
  538. before the next character comes in.  The only delay would be a timer interrupt,
  539. which has been accounted for in the calculations of max speed.  ga
  540. (30,Zhahai) Thanks ga
  541. (30,Jerry S) Any other questions?  ga
  542. Good.  Now the next routine is pretty short, and so will be the description.
  543. The lowest priority interrupt type is the modem status.  Note that the
  544. priority of various types is determined by hardware, and cannot be changed.
  545. To reset a modem status interrupt, all we have to do is read the modem status
  546. register.  We go out and get the port, then place the value found into the
  547. Mstatus byte so the INT14 routine has the last value in the port.  This
  548. also minimizes the need for the INT14 routine to access the chip directly.
  549. Any questions?  ga
  550. ??
  551. GA Mike. ga
  552. <grin>
  553. With the Modem status being the lowest...
  554. (30,KevinR) ??
  555. interrupt vector, would it be possible to get the status out of synch? ga
  556. (30,Jerry S) 
  557. Theoretically, but not pratically, Mike.  The modem status would come into play
  558. when something like carrier dropping, etc.  So, for the hardware it should not -
  559. the interrupt would be handled before a return to whatever was running....
  560. As for the software, it is possible.  The modem status byte reflects the
  561. current value, where the receive and transmit buffers may reflect up to 256
  562. characters earlier.  So, yes it is possible.  However, it is very complex to
  563. keep all the buffers in sync (you almost need another buffer to keep the
  564. modem status, for instance), which is beyond what I wanted to do here.  ga
  565. KevinR. ga
  566. (30,KevinR) You justed asked it Thanks! ga.
  567. (30,Jerry S) Good, two at once!  Any other questions?  ga
  568. The next higher level request is the transmit holding register empty interrupt.
  569. (30,Zhahai) !!
  570. (30,Jerry S) 
  571. This means that a byte has been transferred from the holding reg to the shift
  572. reg for transmission.  The chip now has room for the next character.  Note
  573. that the chip holds two bytes for transmit at one time - the one being
  574. transmitted, and the next one to be transmitted.
  575. When we receive this interrupt, we get a byte from the transmit buffer.  If
  576. a byte is available, we place it into the transmit holding reg and return.  If
  577. not, we disable the transmit holding register interrupt, as we have nothing
  578. more to send at this time.
  579. In either case, we return to the caller for processing of any further requests.
  580. Any questions?  ga
  581. Zhahai. ga
  582. (30,Zhahai) Just a comment.  Ints from this can be stacked 4 deep, no,  ga
  583. (30,Jerry S) 
  584. True, Zhahai.  But I want to make one thing clear here - interrupts from the
  585. system are not the same as interrupt ID's from the port.  If, for instance, you
  586. receive a character with bad parity, two levels will be set - the Receiver Line
  587. Status (for the parity check) and the Receive Data Ready (for the character).
  588. If, at this time, the transmit holding register also goes empty, and you lose
  589. the carrier, you will have 4 levels of interrupts on the async card, but it
  590. will generate only 1 int 0C to the system.  All levels must be processed, or
  591. a lower-level interrupt will not trip the INT 0C again.  ga
  592. (30,Zhahai) ??
  593. GA Zhahai. ga
  594. (30,Zhahai) How do we keep a critical window from happening after the last...
  595. 8250 Int ID was serviced and the return from int?  ga
  596. (30,Jerry S) 
  597. Well, Zhahai, that takes a little careful programming.  For the most part,
  598. you could get by without the STI instruction at entry.  Then the IRET will
  599. reset the interrupt flag.  However, in this case, the code is (almost)
  600. entirely quasi-reentrant: that is, it can (in most places) be interrupted
  601. while processing.  In cases like this it is important to use the stack and
  602. registers for saving values, instead of a location in memory which may be
  603. changed by another interrupt being processed before this one completes.  Also,
  604. be thankful for the stack - try an assembler language (like IBM 370 for big
  605. systems) which doesn't have a stack. It makes re-entrancy very interesting! ga
  606. (30,Zhahai) 
  607. Understand.  But what would the scenario wherein "a lower level int...
  608. (30,KevinR) ??
  609. (30,Zhahai) would never trip the 0c int again" ?  ga
  610. (30,Jerry S) 
  611. That is why we need to process all pending interrupts.  For instance, if we
  612. just processed the first one, if a character came in with bad parity the
  613. line status and receive data available would be set.  The first one we look
  614. at would be the receive line status.  After that is reset, the Interrupt ID
  615. reg will indicate the next (receive data available) is to be processed.  If we
  616. don't handle it at this time, the receive line status, transmit holding ready
  617. and modem status interrupt ID's will not generate an INT 0C, since a higher
  618. (or equal) level is waiting to be processed.  ga
  619. KevinR. ga
  620. (30,KevinR) Jerry, will the int0c rtn ever run for more than one char??? ga.
  621. (30,Jerry S) 
  622. Nope, Kevin, as the async port is a character device.  You will receive or
  623. send one character at a time, and the hardware has no way to handle a second
  624. (or third...) character.  Remember, we are working with a straight character
  625. device, so everything is handled one character at a time.  ga
  626. Any other questions?  ga
  627. Let's look at the next routine then.
  628. This is the next to highest interrupt type, receive data available.  We get
  629. the character from the port and place it in the receive buffer.  If the buffer
  630. is full, the character is not placed in the buffer.  Rather, the receiver
  631. overrun bit is set in the line status byte, so the next time the program
  632. looks at the status, it will find out data has been lost.
  633. Any questions?  ga
  634. Now for the last procedure in our program.
  635. The Rcvrlst routine handles the highest priority interrupt type, the Receiver
  636. Line Status.  This usually indicates an error (i.e. parity check, overrun,
  637. etc.) has occurred.  Like the modem status, all we are going to do here is
  638. take the byte and place it in the line status byte, Lstatus.  After this,
  639. we return to the caller.
  640. Any questions?  ga
  641. (30,Zhahai) ??
  642. GA Zhahai. ga
  643. (30,Zhahai) 
  644. (sorry to be so inquisitive) Won't this overwrite the rcv overflow?  ga
  645. (30,Jerry S) 
  646. That's true, Zhahai.  That is something else I want to change in a later
  647. release of the code.  The most common error would be to get a parity check.
  648. The routine is quick enough that the overrun here should not be set.  The
  649. next version will do two things: Not overlay the overrun bit, and if the
  650. character comes in with bad parity (only possible for 5-7 bit transfers), the
  651. high-order bit will be set when we receive the character.  This way, the
  652. program will know which character has bad parity, not just that it occurred.  ga
  653. Any other questions?  ga
  654. And Zhahai, don't worry - we're having the CO just to get questions asked!  ga
  655. Let's continue then....
  656. Now that we're all done with the INT0C routine, are there any questions on
  657. the operation of this routine?  ga
  658. Well, we're finally done!
  659. As mentioned in the doc, this is by no means a complete routine.  There are
  660. many things which can be improved upon.  I did not go any deeper, as it is
  661. fairly complex as it is, and I felt no need to make it even more so.  Rather
  662. this routine should be considered a 'learning' program, and can be used as a
  663. base for other interrupt drivers for the async port.
  664. I hope you all enjoyed the CO as much as I did.  I am soliciting ideas for
  665. future CO's on advanced programming in assembler language.  One of the
  666. requests we have had is for Device Drivers.  This is a good possiblilty for a
  667. future CO.  We are also looking for other ideas, though, and all are
  668. appreciated.
  669. Also please note there are Conferences on the IBM Novice Forum (PCS-129) for
  670. beginning assembler language.  Watch for bulletins on both SIG's for future
  671. CO's.  Thanks again, and see you soon!
  672. (30,STEVE HULL) !!
  673. (30,Jerry S) 
  674. P.S. Look for a bulletin on the new version later this week.  I will also
  675. (30,David Watson   ) Hear, hear for the Device Drivers CO!!
  676. (30,Avi S.) Mike--> can I ask u a question?
  677. Jerry, I would like to thank you for everyone.  and hope that we get some...
  678. (30,Jerry S) have updated the DOC file with the changes that are made.  ga
  679. More comments for future topics.  ...
  680. Steve.  ga with your question. ga
  681. Avi <== Hold just a few more minutes. ga
  682. (30,Avi S.) ok
  683. (30,STEVE HULL) 
  684. can you comment in general on some of the more advanced SIO's ?
  685. Jerry?  Comment on Steve's question? ga
  686. (30,Jerry S) 
  687. Steve, can you give me a better idea of what you're looking for?...
  688. I can comment on a lot, most of it not too interesting!  <grin>  ga
  689. (30,STEVE HULL) 
  690. I'm working with an 8530 and need some help with initializing the sucker!!
  691. (30,Jerry S) 
  692. Steve, I'll byte. which is the 8530? (I don't know numbers, just functions). ga
  693. (30,STEVE HULL) if youi have any experience with DMA, I'd be interested. ga
  694. Steve <== Why an 8530? ga
  695. (30,STEVE HULL) The 8530 is a zilog chip capable of handleing NRZI
  696. (30,Zhahai) Thanks, Jerry and Mike.  This has been very useful !  ga
  697. Jerry <== Want to open up for free-for-all (Read Between the Lines)??? ga
  698. (30,STEVE HULL) encoding for SNA.  ga
  699. (30,Jerry S) Glad you liked it, Zhahai!  ga
  700. OK, all, let's throw this wide open.  The formal part of the Co is over,
  701. thanks a lot for you interest and *very* good questions!  You also pointed
  702. out some of the code I messed up, and as I said, I hope to have a later
  703. version in the DL4 lib later this week (oh, my poor CIS bill!).  Thanks
  704. again, and have a good eveing!  ga
  705. (30,Zhahai) Jerry <= there is a small flaw in the documentation, point #5...
  706. Let me chime in that Jerry needs topics for future CO's.  *HIT* hit now!!! ga
  707. (30,Jerry S) 
  708. Steve, I haven't worked with SNA yet.  The DMA subject can be touchy, though.
  709. (30,Zhahai) Jerry, under changes from ROM int14, bit 1.  ga
  710. (30,Jerry S) 
  711. I have done some DMA with the disk adapter, with a fair amount of success,
  712. but mostly end up overlaying something and hitting the 'big red switch'!
  713. (30,Zhahai) Jerry, Mike, I would love a DMA conf.  ga
  714. (30,Jerry S) 
  715. The SNA controller can do DMA, what I would suggest is getting a data sheet
  716. ont he chip from one of the manufacturers.  ga
  717. Jerry, Know anyone comfortable with DMA?? ga
  718. (30,Jerry S) 
  719. Zhahai --> OK, I'll look at it... I don't have a copy of the DOC handy, but
  720. (30,STEVE HULL) I'll second the request for a DMA co.  gaa
  721. (30,Jerry S) I have made a note of it.  ga
  722. (30,Zhahai) Jerry - just change 'transmit overrun' to 'recieve overrun'.  ga
  723. (30,Jerry S) 
  724. Mike, not really any more than I am.  I'll check around and see if some of
  725. my friends who work with SNA know a little more.  Being at a plant site with
  726. Jerry <== I wasn't meaning you couldn't handle it, you just sounded shy! ga
  727. (30,Jerry S) people working on the PC is a help!  ga
  728. Mike, I really don't feel comfortable enough to do it, quite frankly...
  729. If I had my hands on the chip, I would feel a lot better!  I know the theory,..
  730. and had some pratical experience, but not enough for a CO!  ga
  731. (30,Zhahai) How about disk DMA COnf?  ga
  732. (30,Jerry S) 
  733. Zhahai, thanks a lot.  Looks like my transmitter doesn't know what...
  734. Zhahai --> my receiver is doing!  ga
  735. Jerry <== Anyone there interested in expanding their capabilities? ga
  736. (30,STEVE HULL) yes
  737. (30,Jerry S) 
  738. Zhahai, I don't think we really need one on that; BIOS does it so well!  ga
  739. Steve <== We'll work on your DMA problem and see what we can drum up! ga
  740. (30,Zhahai) 
  741. Jerry - I fantasize about an asynchronous disk read/write, sets flag when...
  742. (30,Jerry S) 
  743. Steve, want to expand your capabilities? You should hold a CO!  Nothing like
  744. (30,Jerry S) holding your own to learn the subject!  ga
  745. (30,Zhahai) Jerry <- done, rather than waiting like BIOS does.  ga
  746. (30,David Watson   ) Mike ==< Thanx
  747. (30,Jerry S) 
  748. Zhahai, I agree.  But most programs need to wait for the data anyway,
  749. (30,Rick K.) Whats new and exciting tonite? ga
  750. (30,Jerry S) Zhahai --. so the time savings would not be too great.  ga
  751. (30,Zhahai) Mike <- glad you are back and presumabley better.  ga
  752. (30,Jerry S) 
  753. Zhahai --> Also, DOS isn't made to handle the interrupts asynchronously, ...
  754. Zhahai --> although I've dreamed about it, too!  ga
  755. Rick <== Just finished Jerry's CO on ASM INT 14 ASYNCH program in DL4. ga
  756. (30,Zhahai) 
  757. Jerry -> It could help a lot for a "type" style program, which otherwise...
  758. (30,Jerry S) Good evening, Rick!  ga
  759. (30,Edward Huang   ) DL4
  760. (30,Jerry S) 
  761. Mike-->I'm surprised how well this went! Some good questions, which indicates...
  762. Zhahai <== Just holding on to the edges.  Can hardly wait for bedtime! ga
  763. (30,Zhahai) Jerry -> has to "lurch" now and then while it awaits disk i/o.  ga
  764. (30,Jerry S) 
  765. Mike --> the people kept up, and over at an early time.  Last weeks on the...
  766. mike --> Novice Forum lasted until almost midnight EST!  ga
  767. Jerry, You aren't disappointedare you?  <grin> ga
  768. (30,David Watson   ) {_}iMike, I have 2 questions for you?
  769. (30,Avi S.) mike-> I do
  770. Ave <== You've been waiting all evening!  You first and then David. O.K. ?  ga
  771. I mean Avi  (Sorry!) ga
  772. (30,Jerry S) 
  773. Zhahai --> I agree, but then who would rewrite DOS?  Otherwise we'd have
  774. Zhahai --> kinds of problems!  ga
  775. Speaking of DOS...   JERRY    ...  When is 3.1???   ga
  776. (30,Avi S.) Before I installed my hard disk UI removed the B floppy...
  777. (30,STEVE HULL) 
  778. Thanks for taking the time to put the conference together.  See you!
  779. (30,Jerry S) Mike --> Don't hit ^B in the CO!  ga
  780. (30,Zhahai) 
  781. Jerry <- sigh, too true.  I was considering NOT calling DOS during such...
  782. (30,Avi S.) but I just left the cable hanging from the floppy controller
  783. Good Night, Steve.  Have a *GREAT* Week!!! ga
  784. (30,Jerry S) 
  785. Mike, DOS 3.1 should be ready shortly, from the announcement.  I'm more
  786. Mike --. waiting for my copy of TOPVIEW though.  ga
  787. (30,Zhahai) 
  788. Jerry <- I/O, and just unravaeling the FAT myself.  (fantasy, remember)  ga
  789. (30,Avi S.) 
  790. could this be a cause for the computer not to recognize the hard disk?
  791. (30,Jerry S) No problem, Steve, and thanks for coming!  ga
  792. (30,Jerry S) 
  793. Zhahai --> I know, I know.....  I might recommend you look at the BIOS listing
  794. Zhahai --> the disk interrupts.  You'll find the loop there, and should be
  795. Avi <== Did you reset the System board switches?  Who's HD and driver??? ga
  796. (30,Jerry S) able to get the DMA you need.  ga
  797. Mike --. If you don't mind my asking, what were you in the hospital for?  ...
  798. (30,Zhahai) 
  799. Jerry -> well, someday.  I would almost get a copy of WINDRIVE from...
  800. (30,Jerry S) Mike --> nothing serious, I hope (we NEED you!)  ga
  801. (30,Avi S.) 
  802. Mike-> its Everex and they claim its not necessary to change any swithches
  803. Jerry <== Gastroenteritis that ended up with a tear in the stomach lining!!!
  804. (30,Avi S.) but Itried changing them but it still did not help ga
  805. (30,Zhahai) Jerry -> from TallTree just for the driver source (Installable).  ga
  806. Avi <== Did you create the CONFIG.SYS file and have it on your BOOT disk? ga
  807. (30,Jerry S) 
  808. Mike --. Ooo, I'll bet that hurt!  I hope you feel better now, though!  ga
  809. (30,Avi S.) what has to be in the config.sys?
  810. (30,Jerry S) 
  811. Zhahai --. Just do what I do - use a virtual disk.  Saves gobs of time,...
  812. (30,Jerry S) Zhahai --> and is completely compatable!  ga
  813. (30,Avi S.) they didn't say anything about it. ga
  814. Jerry <== Everything is coming out better now!!!   <grin> ga
  815. (30,Jerry S) Mike --> I wouldn't complain it it were!  ga  P.S. <grin>  ga
  816. (30,mitch jones    ) Hello
  817. (30,Jerry S) Hi, Mitch!  ga
  818. (30,Zhahai) 
  819. Jerry - that was another thought.  Could pseudo-DMA, no ints or anything.  ga
  820. (30,Avi S.) mike-> but they didnt give me a device driver
  821. (30,Jerry S) 
  822. Zhahai --> If you've never used a virtual disk, you're in for a treat!  I...
  823. Zhahai --> run 320K right now, with occasional 400K as necessary.  ga
  824. (30,mitch jones    ) Thanks, just dropped in to see what's up ga
  825. (30,Jerry S) 
  826. Avi --> When you took out the 'B' drive, did you reset the switches for one...
  827. (30,Zhahai) 
  828. Jerry -> see my disk timing msg, recent.  Can copy 1MB from HD to NUL in 9 sec.
  829. Jerry <== Anytime, It's a *REAL* pleasure having you here!!! ga
  830. (30,Avi S.) They said it wasn't necessary but I tried and it didn't help
  831. Avi <== I think you'd better check with your dealer.  I don't know of any...
  832. (30,Jerry S) 
  833. Avi --> drive?  And is your disk compatable with the IBM XT disk?  ga
  834. (30,Zhahai) 
  835. Jerry ->, how much would a ramdisk help?  HD is usually fast enuff.  ga
  836. Avi <== hard disk installation other than for DOS 2.0 and 2.1 and the XT ...
  837. (30,Jerry S) Zhahai --> About the same as copying from hard disk...
  838. Avi <== that does not require a device driver!  GA
  839. (30,Jerry S) 
  840. Zhahai --> For instance, BASICA comes up when you hit the return key, almost...
  841. (30,Avi S.) jerry->yes.Its Everex
  842. (30,Jerry S) Zhahai --> no delay at all! (If you blink, you miss it!)  ga
  843. (30,Jerry S) 
  844. Avi --> I don't have much experience with Everex, but if it is supposed to be...
  845. (30,Zhahai) 
  846. Jerry, Yep, HD is similar.  Only reason I see for RamDisk is to save...
  847. Zhahai <== My bernoulli drives are almost that fast too!!! ga
  848. (30,Jerry S) 
  849. Avi --> completely compatable, you should be able to format it from the...
  850. Avi --> the FDISK program.  ga
  851. (30,Zhahai) Jerry, wear'n'tear.  Or to have a special driver   ga
  852. (30,Zhahai) Mike -> are they back from the hospital too?  ga
  853. Zhahai <== I just installed JRAM2 on my PC and can have up to 16 MB RAM disk...
  854. (30,Jerry S) 
  855. Zhahai --> Well, I haven't played with an AT yet (dream), but the Xt...
  856. (30,Avi S.) Jerry-> I cant even get it to spin much less format it
  857. Zhahai <== If I wanted to install all 8 boards!!! ga
  858. (30,Jerry S) Zhahai --> is still noticeably slower.  ga
  859. Zhahai <== The bernoulli's are on the way. I expect Monday or Tuesday!!! ga
  860. (30,Jerry S) 
  861. Avi --> Hmmm Looks like you have a basic hardware problem there.  I
  862. (30,Zhahai) Mike, would you use UNenhanced AT + Bernoullis?  ga
  863. (30,Jerry S) 
  864. Avi --> would suggest you check the voltages coming into the disk.  ga
  865. Avi <== Have you addressed drives B, C, D, and on to see if DOS put it ...
  866. (30,David Watson   ) ~r/ust
  867. (30,Jerry S) Mike --. Anything interesting new on the DL files?  ga
  868. (30,Zhahai) 
  869. Jerry, I have external Pegasus 23 M, faster than XT disk (what isn't).  ga
  870. Avi <== some place out in left field? 
  871. Avi <== That can happen based on switch settings. ga
  872. (30,Avi S.) jerry->well what I said is not quite correct...
  873. Jerry <== IBM UGE disk for January.  I have FileExpress V. 3.0 ready but...
  874. (30,Avi S.) 
  875. the green ready light comes on but I cant get the the red one to come on
  876. Jerry <== not up on the SIG yet (drat!!!). ga
  877. (30,Jerry S) Mike --. Anything new on the DL databases of interest?  ga
  878. (30,Avi S.) mik3-> yes I tried all the way up to z!
  879. (30,Jerry S) Mike --> What's FileExpress?  ga
  880. (30,Zhahai) 
  881. Mike - I started a modified UGE disk, consisting of just the technical...
  882. (30,Jerry S) Avi --. Hmmm does the disk spin at all?  ga
  883. Avi <== Sounds like a trip back to the dealer is the only cure!!! ga
  884. (30,mitch jones    ) can I jump in with a software question ga
  885. Jerry <== Did you get my (drat!!!)  ga
  886. (30,Zhahai) 
  887. Mike- extracts, same menu program.  Do you think anyone else would like...
  888. GA mitch!!! ga
  889. (30,Jerry S) Go ahead, Mitch.  This is the 'free for all'  ga!
  890. (30,Jerry S) Got it, Mike... Didn't know if you had gotten mine!  ga
  891. (30,mitch jones    ) Anybody there use Word Star/...
  892. (30,Avi S.) jerry->for a split second on cold start
  893. (30,Zhahai) Mike - such a thing? I hate to download all the chaff.  ga
  894. (30,Avi S.) ga
  895. (30,mitch jones    ) I have a set up problem ga
  896. (30,Jerry S) Mike --> Where is the UGE disk?  ga
  897. (30,Jerry S) What's wrong, Mike?  ga
  898. (30,Jerry S) OOOps, Make that MITCH!  ga
  899. Zhahai <== The offer stands for anyone to send a disk in the mail 
  900. Zhahai <== if they want! ga
  901. (30,mitch jones    ) I can't get it to install...
  902. (30,mitch jones    )  into my PC but it works...
  903. Jerry <== The UGE disks are in DL0.  ga
  904. (30,mitch jones    ) fine on the office XT ga
  905. (30,Jerry S) 
  906. Avi --. Perhaps you are overloading the power supply, and one of the
  907. voltages is going away (although I thought the whole thing would go)  ga
  908. Thanks, Mike.  ga
  909. (30,Zhahai) Well, later folks... 's been fun.   ga   o-o
  910. (30,CHARLES ANDERSON    ) Hello there  ga
  911. (30,Avi S.) I guess I'll have to go back to the store
  912. mitch <== do you have the WINSTALL program with the WordStar? ga
  913. (30,Jerry S) Mitch --. What do you get for messages?  ga
  914. (30,mitch jones    ) Mike, yes...
  915. Good night Zhahai.  Be 'seein' you later...   Mike(30,Jerry S) Hi, Charles!  ga
  916. (30,mitch jones    ) but when I use it...
  917. Hi, Charles.  Help you with anything? ga
  918. (30,Jerry S) 'Night, Zhahai, and thanks again for all your good questions!  ga
  919. (30,mitch jones    ) on the PC set up it wont make a Dir ga
  920. (30,CHARLES ANDERSON    ) Hi gerry - was someone having voltage problems?  ga
  921. Avi <== Sorry we couldn't get past the hardware problem!!!  ga
  922. (30,Jerry S) Charles --. Don't know, almost soundsl like Avi might.  ga
  923. (30,mitch jones    ) Jerry, Error E44 ga
  924. (30,Jerry S) 
  925. Avi --> I suspect something in the hardware.  The disk should spin when...
  926. (30,CHARLES ANDERSON    ) I missed eearlier - but had some which I solved ga
  927. (30,Jerry S) Avi --. power is applied.  ga
  928. (30,David Watson   ) {Mike, can you point me to a CO etiquette manual?? ga
  929. (30,Jerry S) Mitch --. Hmmm that doesn't ring a bell, and I don't have mu...
  930. (30,Jerry S) mitch --> doc handy... What is an E44?  ga
  931. (30,mitch jones    ) Jerry s I don't know...
  932. Mitch <== What do you have the default drive set to?  C: ??? ga
  933. (30,Avi S.) 
  934. jerry-. it does sound like it's on when I power up and as I said the green...
  935. ready light is on but when I try to access it the computer hangs and then...
  936. gives the disk not ready error. ga
  937. (30,CHARLES ANDERSON    ) 
  938. Avi do I gather you're having some hard disk problems?  ga
  939. (30,mitch jones    ) Mike, no protocol ga
  940. (30,Avi S.) 
  941. It's as if it's looking at the end of the cable of the floppy controller...
  942. (30,Avi S.) and not finding anything there. ga
  943. Mitch <== No I mean maybe the WS program is trying to access drive C: which...
  944. (30,Avi S.) charles-> yup
  945. Mitch <== may not be available on your PC?  ga
  946. (30,CHARLES ANDERSON    ) I've had a Davong for two years and been ...
  947. (30,mitch jones    ) Mike I don't think so...
  948. (30,CHARLES ANDERSON    ) through a lot - anything I can help on?  ga
  949. (30,Jerry S) 
  950. Avi --. Well, if you get a 'disk not ready', the system knows it's there...
  951. (30,mitch jones    ) to install on the PC and that...
  952. (30,mitch jones    ) was set to PC. ga
  953. Well everyone, since my Doctor doe not know I'm up doing this and I'm ...
  954. (30,Avi S.) jerry->I'm not sure if that was the exact error
  955. Supposed to be in bed for the next seven days,  Guess I'd better head out...
  956. (30,Jerry S) 
  957. Avi --> So your problem seems to be in the access.  
  958. If you can't format it with Fdisk,
  959. you need to take it back to your dealer.  ga
  960. Anything only the SysOp can answer or take care of??? ga
  961. (30,mitch jones    ) Mike go to bed and rest ga
  962. (30,Avi S.) even just a dir just makes it hang ga
  963. Thanks, mitch.  See you next week. ga
  964. (30,Jerry S) Mike, although it will be hard, I think we can make it by...
  965. (30,David Watson   ) {Mike, best wishes, get healthy!! ga
  966. Jerry <grinning> Thanks to you again!!! ga
  967. (30,Jerry S) 
  968. Mike --> Go to bed, get plenty of rest, and we'll see you next week!  ga
  969. My pleasure, Mike.  'Night!  ga
  970. Thanks David and everyone else.  Good night and have a good week!!! Bye
  971.